# 冒泡排序：重复地走访过要排序的数列，一次比较两个元素，如果他们的顺序错误就把他们交换过来
my_list = [23, 12, 3, 566, 78, 90, 12]


def bubble_sort(order_list):
    n = len(order_list)  # 获得数组的长度
    for i in range(n):
        for j in range(i + 1, n):
            if order_list[i] > order_list[j]:  # 如果前者比后者大
                order_list[i], order_list[j] = order_list[j], order_list[i]  # 则交换两者
    return order_list


print("冒泡排序：", bubble_sort(my_list))

# 选择排序：一直在序列中找到最小（大）元素，存放到排序序列的起始位置
my_list = [23, 12, 3, 566, 78, 90, 12]


def select_sort(order_list):
    n = len(order_list)
    for i in range(0, n):
        min = i  # 最小元素下标标记
        for j in range(i + 1, n):
            if order_list[j] < order_list[min]:
                min = j  # 找到最小值的下标
        order_list[min], order_list[i] = order_list[i], order_list[min]  # 交换两者
    return order_list


print("选择排序：", select_sort(my_list))

# 插入排序：对于每个未排序数据，在已排序序列中从后向前扫描，找到相应位置并插入
my_list = [23, 12, 3, 566, 78, 90, 12]


def insert_sort(order_list):
    n = len(order_list)
    for i in range(1, n):
        key = i - 1
        mark = order_list[i]  # 必须将order_list[i]赋值为mark，不能直接用order_list[i]
        while key >= 0 and order_list[key] > mark:
            order_list[key + 1] = order_list[key]
            key -= 1
        order_list[key + 1] = mark
    return order_list


print("插入排序：", insert_sort(my_list))
